package cn.tedu.tmall.front.account.service;

import cn.tedu.tmall.common.consts.data.AccountConsts;
import cn.tedu.tmall.common.pojo.authentication.CurrentPrincipal;
import cn.tedu.tmall.front.account.pojo.param.UserRegisterParam;
import cn.tedu.tmall.front.account.pojo.param.UserUpdateInfoParam;
import cn.tedu.tmall.front.account.pojo.vo.UserSimpleInfoVO;
import org.springframework.transaction.annotation.Transactional;

/**
 * 处理用户数据的业务接口
 *
 * @author java@tedu.cn
 * @version 3.0
 */
@Transactional
public interface IUserService extends AccountConsts {

    /**
     * 用户注册
     *
     * @param userRegisterParam 注册参数
     */
    void register(UserRegisterParam userRegisterParam);

    /**
     * 修改基本信息
     *
     * @param currentPrincipal    当事人
     * @param userUpdateInfoParam 新的基本信息
     */
    void updateInfo(CurrentPrincipal currentPrincipal, UserUpdateInfoParam userUpdateInfoParam);

    /**
     * 修改密码
     *
     * @param currentPrincipal 当事人
     * @param oldPassword      原密码
     * @param newPassword      新密码
     */
    void updatePassword(CurrentPrincipal currentPrincipal, String oldPassword, String newPassword);

    /**
     * 修改头像
     *
     * @param currentPrincipal 当事人
     * @param avatar           新头像的URL
     */
    void updateAvatar(CurrentPrincipal currentPrincipal, String avatar);

    /**
     * 修改手机号码
     *
     * @param currentPrincipal 当事人
     * @param phone            新手机号码
     */
    void updatePhone(CurrentPrincipal currentPrincipal, String phone);

    /**
     * 修改电子邮箱
     *
     * @param currentPrincipal 当事人
     * @param email            新电子邮箱
     */
    void updateEmail(CurrentPrincipal currentPrincipal, String email);

    /**
     * 查询当前用户基本信息
     *
     * @param currentPrincipal 当事人
     * @return 匹配的用户基本信息，如果没有匹配的数据，则返回null
     */
    UserSimpleInfoVO getSelfSimpleInfo(CurrentPrincipal currentPrincipal);

}
